import mitt from 'mitt';

// 定义事件类型
type Events = {
    [key: string]: any; // 任意事件名称及对应的数据类型
};

/**
 * Mitt事件管理工具类
 */
class MittUtils {
    private static emitter = mitt<Events>();
    /**
     *     监听事件
     */
    static on(eventName: string, handler: (event: any) => void): void {
        this.emitter.on(eventName, handler);
    }

    /**
     * 移除事件监听
     * @param eventName 事件名称
     * @param handler 事件处理函数
     */
    static off(eventName: string, handler?: (event: any) => void): void {
        this.emitter.off(eventName, handler);
    }

    /**
     * 触发事件
     * @param eventName 事件名称
     * @param payload 事件数据
     */
    static emit(eventName: string, payload?: any): void {
        this.emitter.emit(eventName, payload);
    }

    /**
     * 清除所有事件
     */
    static clear(): void {
        this.emitter.all.clear();
    }
}

export default MittUtils;
